iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0

經過昨天的進度,我們可以知道想要將子層的 data 往父層傳遞可以透過 call by function 的方式,在子層使用 function 將 data 作為參數帶出去,父層使用 function 接收 data 並 return 就可以獲得資料。

現在我們就可以在按下送出按鍵的時候,得到 input 的值,那麼我們可以在點下送出的時候,將資料塞進 TodoList 這個 array 裡面就可以將新的資料 render 到畫面上啦。

回到 code 的部分。

const todoList = [
  "做點什麼1",
  "做點什麼2",
  "做點什麼3",
  "做點什麼4",
  "做點什麼7",
  "做點什麼8",
  "做點什麼9",
];

我們現在可以看到 TodoList 是一個單純的 array,這顯然不是實務上會使用到的方式。
所以我們可以通過建立一個 mockData 來存放他,這個資料。

|- src
|-- data
|--- mock
|---- todoList.json

這時候我們先將資料修改一下

[
  { "id": 1, "title": "做點什麼1", "desc": "這是todo1的detail" },
  { "id": 2, "title": "做點什麼2", "desc": "這是todo2的detail" },
  { "id": 3, "title": "做點什麼3", "desc": "這是todo3的detail" },
  { "id": 4, "title": "做點什麼4", "desc": "這是todo4的detail" },
  { "id": 5, "title": "做點什麼7", "desc": "這是todo7的detail" },
  { "id": 6, "title": "做點什麼8", "desc": "這是todo8的detail" },
  { "id": 7, "title": "做點什麼9", "desc": "這是todo9的detail" }
]

既然這邊的資料改了,那麼我們在HomeListPage這個元件中的參數也需要做修正。

/**
 * @param {string} title
 * @param {Array.<string>} todoList
 * @param {boolean} isMove
 * */
const HomeListPage = ({ title, todoList, isMove, children })

可以看到現在的 todoList 是一個 string 元素的 array,我們把 {Array.<string>} 改成{Array.<object>} ,這時候我們可以知道我們需要的資料是 todoList 中的 title,這邊就把{todo}改成{todo.title}就可以了,接下來我們回到父層把傳進 component 的資料做個修正就可以了。

現在我們繼續把資料丟進 array,首先可以通過 useEffect,在一進來這個頁面的時候獲得 mockData。


上一篇
把功能補齊吧
下一篇
建立我們自己的api
系列文
30天製作與眾不同的TodoList吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言